﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace CLM.Gestao.Vendas.UI
{
    public partial class RelatorioVendas : Form
    {
        #region Construtor

        public RelatorioVendas(int pAno, int pMes, Microsoft.Office.Interop.Excel.Application pApplication)
        {
            try
            {
                InitializeComponent();

                ExcelAppication = pApplication;

                var pos = this.PointToScreen(lblTitulo.Location);
                pos = picTitulo.PointToClient(pos);
                lblTitulo.Parent = picTitulo;
                lblTitulo.Location = pos;
                lblTitulo.BackColor = Color.Transparent;

                InicializaCombos(pAno, pMes);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Construtor

        private Microsoft.Office.Interop.Excel.Application ExcelAppication = null;

        #region Eventos

        private void btnExportar_Click(object sender, EventArgs e)
        {
            Exportar();
        }

        #endregion Eventos

        #region Métodos Privados

        private void InicializaCombos(int pAno, int pMes)
        {
            // Carrega o combo de Período
            Administrador.BLL.Periodo Periodo = new Administrador.BLL.Periodo();
            cboPeriodo.DataSource = Periodo.GetItens(new Administrador.BLL.Periodo.Lista() { AnoPeriodo = pAno });
            cboPeriodo.DisplayMember = "DescricaoPeriodo";
            cboPeriodo.ValueMember = "MesPeriodo";

            cboPeriodo.SelectedValue = pMes;
        }

        private void ValidarInterface()
        {
            if (string.IsNullOrWhiteSpace(cboPeriodo.Text)) throw new Exception("O período é obrigatório.");
        }

        private void Exportar()
        {
            try
            {
                BLL.Venda Venda = new BLL.Venda();

                // Recupera o período selecionado
                List<int> Periodos = new List<int>();
                if (chkYTD.Checked)
                {
                    for (int i = cboPeriodo.SelectedIndex; i >= 0; i--)
                    {
                        Periodos.Add(((Administrador.BLL.Periodo.Itens)cboPeriodo.Items[i]).IdPeriodo);
                    }
                }
                else
                {
                    Periodos.Add(((Administrador.BLL.Periodo.Itens)cboPeriodo.SelectedItem).IdPeriodo);
                }

                // Exporta os dados de vendas
                var ListaVendas = Venda.GerarRelatorioVendas(Periodos.ToArray());

                string[] Cabecalho = { "Estado", "Nota", "Série", "Cliente", "Nome", "Código do Produto", "Nome do Produto", "Código do Produto Global", "Nome do Produto Global", "Nome do Produto Família", "Tipo", "Volumes", "Returns - Units", "Volume After Returns", "Gross Sales", "Returns - Amount", "Total Others Revenues", "Others Revenues", "Gross Proceed of Sales", "Total General Price Reduction", "Net Proceeds of Sales", "Total Perf Trade", "Cash Discount", "Net Sales", "List Price", "Volumes After Return", "Net Net Sales" };
                List<string> ListaCampos = new List<string> { "Estado", "Nota", "Serie", "Cliente", "Nome", "CodigoProduto", "NomeProduto", "CodigoProdutoGlobal", "NomeProdutoGlobal", "NomeProdutoFamilia", "Tipo", "Volumes", "ReturnsUnit", "VolumeAfterReturns", "GrossSales", "ReturnAmount", "TotalOthersRevenue", "OthersRevenue", "GrossProceedOfSales", "TotalGeneralPriceReduction", "NetProceedsOfSales", "TotalPerfTrade", "CashDiscount", "NetSales", "ListPrice", "VolumesAfterReturn", "NetNetSales" };
                Relatorio.Excel<BLL.Venda.Relatorio>.TipoRelatorio = Relatorio.TipoRelatorio.Simples;
                Relatorio.Excel<BLL.Venda.Relatorio>.Gerar(ListaVendas, ListaCampos, Cabecalho, "Relatório de Indicadores de Vendas", "Vendas", ExcelAppication);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Métodos Privados
    }
}